6.4 Datumsfunktionen
 
Ähnlich wichtig wie Stringfunktionen sind Datumsfunktionen. Angenommen, in einem Textfeld soll das heutige Datum als Vorgabedatum stehen. Dann können Sie folgende Eigenschaft verwenden:
System.DateTime.Today
Soll nun der Benutzer in ein Textfeld eine Datumsangabe eingeben, dann kann diese Angabe auf Richtigkeit überprüft werden mit:
IsDate(Me.txtDatum.Text)
Die Funktion liefert »True« oder »False«. Um ganz sicherzugehen, dass der Benutzer eine korrektes Datum eingegeben hat, sollten Sie eines der beiden Steuerelemente »DateTimePicker« oder »MonthCalendar« verwenden. Dies kann dann interessant sein, wenn das Programm die Datumsangaben weiterverarbeitet. Beachten Sie, dass das ausgewählte Datum des »DateTimePicker« mit der Eigenschaft »Value« herausgeholt wird.
Abbildung 6.13
Der MonthCalendar
Dagegen kann »MonthCalendar« zusammenhängende Datumsbereiche markieren. Sie werden mit »SelectionStart« und »SelectionEnd« gelesen oder geschrieben.
Allerdings sind beide Steuerelemente schwierig mit der Tastatur zu bedienen. Für die Benutzer, die viele Eingaben mit der Tastatur tätigen, bleibt dann doch nur das Textfeld.
Und mit der Eingabe kann weiter gearbeitet werden:
If IsDate(Me.txtDatum.Text) = False Then
MessageBox.Shox("Bitte ein Datum eingeben")
Me.txtDatum.Select()
Else
Dim datDatum As Date
datDatum = CType(Me.txtDatum.Text, Date)
MessageBox.Show(datDatum.Year.ToString)
End If
Die Methode Year holt das Jahr heraus, Month den Monat, Day den Tag. DayOfWeek liefert als Zahl den Wochentag als Text. Interessanterweise liefert datDatum.DayOfWeek den Wochentag als Zahl, beginnend bei 1 für Montag, während datDatum.DayOfWeek den Wochentag als Text zurückgibt. Und natürlich könnte man aus der aktuellen Uhrzeit mit Hour und Minute die Uhrzeit herauslösen.
Abbildung 6.14
Das Datum wird zerlegt.
Dazu einige Beispiele. Gesucht ist die Anzahl der vergangenen Monate eines Geschäftsjahres. Das Geschäftsjahr fängt im April an, also aus 4 wird 1, aus 5 (Mai) wird 2, ... aus 12 (Dezember) wird 9, aus 1 (Januar) wird 10, ... und aus 3 wird 12.
Sub Geschäftsjahr1()
Dim datDatum as Date
Dim intMonat As Integer
Dim intAusgabeMonate As Integer
Dim strText As String
datDatum = Me.txtDatum.Text
intMonat = datDatum.Month
Select Case intMonat
Case 1, 2, 3
intAusgabeMonate = intMonat + 9
strText = "Es sind " & intAusgabeMonate.ToString & _
" Monate vergangen."
Case 4
intAusgabeMonate = intMonat - 3
strText = "Es ist " & intAusgabeMonate.ToString & _
" Monat vergangen."
Case Else
intAusgabeMonate = intMonat - 3
strText = "Es sind " & intAusgabeMonate.ToString & _
" Monate vergangen."
End Select
MessageBox.Show(strText)
End Sub
Es funktioniert auch anders. Es wird nun eine Variante gezeigt, die auch funktioniert:
Sub Geschäftsjahr2()
Dim datDatum as Date
Dim intMonat As Integer
Dim intAusgabeMonate As Integer
Dim strText As String
datDatum = Me.txtDatum.Text
intMonat = datDatum.Month
Select Case intMonat
Case 1 To 3
intAusgabeMonate = intMonat + 9
strText = "Es sind " & intAusgabeMonate.ToString & _
" Monate vergangen."
Case 4
intAusgabeMonate = intMonat - 3
strText = "Es ist " & intAusgabeMonate.ToString & _
" Monat vergangen."
Case Is > 4
intAusgabeMonate = intMonat - 3
strText = "Es sind " & intAusgabeMonate.ToString & _
" Monate vergangen."
End Select
MessageBox.Show(strText)
End Sub
Abbildung 6.15
Die vergangenen Monate des laufenden Geschäftsjahrs werden ermittelt (erneut 22.07.2002).
Der Benutzer soll in ein Textfeld sein Geburtsdatum eingeben. Daraufhin wird überprüft, ob er Geburtstag hat, was ihm über ein Meldungsfenster mitgeteilt wird:
Sub Geburtstag()
Dim datDatum As Date
Dim bytTag As Byte
Dim bytMonat As Byte
Dim intAnzTage As Integer
datDatum = Me.txtDatum.Text
bytTag = datDatum.Day
bytMonat = datDatum.Month
If bytTag = DateTime.Today.Day And _
bytMonat = DateTime.Today.Month Then
MessageBox.Show("Happy Birthday")
Else
datDatum = datDatum.AddYears(DateTime.Today.Year - _
datDatum.Year)
If datDatum < DateTime.Today Then
intAnzTage = 365 - _
DateTime.Today.Subtract(datDatum).Days
Else
intAnzTage = datDatum. Subtract(DateTime.Today).Days
End If
MessageBox.Show("Du hast erst in " & _
intAnzTage.ToString & _
" Tagen Geburtstag.")
End If
End Sub
Abbildung 6.16
... noch nicht ...
Die Variable datDatum wird vom Typ Date deklariert. Sie nimmt das Datum auf, das der Benutzer eingibt. Aus ihr werden die Informationen Day und Month herausgezogen und mit dem aktuellen Tag und dem aktuellen Monat verglichen. Nur wenn beide zugleich mit dem heutigen Tag und dem heutigen Monat übereinstimmen, hat der Benutzer Geburtstag. Year zu vergleichen, ist nicht nötig, - ja, ist sogar falsch, da das Geburtsjahr ein anderes ist als das aktuelle Jahr.
Hat der Benutzer heute nicht Geburtstag, so wird die Differenz der Jahre zwischen dem heutigen Jahr und dem Geburtsjahr ermittelt. Diese Zahl wird zur Jahreszahl des Geburtsdatums addiert. Damit wird der Tag im laufenden Jahr ermittelt, wann der Benutzer Geburtstag hatte oder haben wird. Also: Hat der User am 07.04.1964 Geburtstag und ist heute der 02.06.2002, so wird aus dem Geburtstag der 07.04.2002. Das heißt, der Benutzer hatte schon Geburtstag, was wiederum bedeutet, dass er 309 - (02.06.2002 - 07.04.2002) Tage warten muss. Hätte er am 02.07.1972 Geburtstag, so müsste er nur 30 (02.07.2002 - 02.06.2002) Tage warten. Diese Zahl wird ermittelt und angezeigt.
Hier die Liste der wichtigsten Datumsfunktionen einer Datumsvariablen:
Tabelle 6.3
Die wichtigsten Datumsfunktionen
| Methode
|
Bedeutung
|
| Day
|
ermittelt den Tag
|
| Month
|
ermittelt den Monat
|
| Year
|
ermittelt das Jahr
|
| DayOfWeek
|
ermittelt den Wochentag
|
| AddDays
|
addiert Tage zum Datum
|
| AddMonth
|
addiert Monate zum Datum
|
| AddYears
|
addiert Jahre zum Datum
|
| Add
|
addiert den angegebenen Wert zum Datum
|
| Today
|
das heutige Datum
|
| Compare
|
vergleicht zwei Datumsangaben und liefert -1, 0 oder 1
|
| Subtract
|
bildet die Differenz zweier Datumsangaben
|
| ToLongDateString
|
stellt das Datum in der langen Darstellung dar
|
| ToShortDateString
|
stellt das Datum in der kurzen Darstellung dar
|
| ToString
|
formatiert das Datum mit d, M, j. Dabei bedeuten beim 02.06.2002:
d 2
dd 02
ddd Di
dddd Dienstag
M 6
MM 06
MMM Jul
MMMM Juli
yy 02
yyyy 2002
Beispiel:
»dddd, dd. MMMM yyyy«
|
Das obere Beispiel kann also auch folgendermaßen mit der Methode ToString dargestellt werden:
MessageBox.Show("Das Jahr lautet: " & _
datDatum.ToString("yyyy") & vbCr & _
"Der Monat lautet: " & datDatum.ToString("MM") & vbCr & _
"Der Tag lautet: " & datDatum.ToString("dd"))
Achten Sie dabei auf die Großschreibung von »M« für das Monatskennzeichen.
|